package main

import (
	"database/sql"
	"errors"
	xerrors "github.com/pkg/errors"
)

// User 用户信息，model/user.go。
type User struct {
	ID   int
	Name string
}

// GetUserByID 根据用户 id 查找用户信息，dao/user.go。
func GetUserByID(db *sql.DB, id int) (u User, err error) {
	query := `SELECT id, name FROM user WHERE id = ?`
	// 执行查找，如果有错误就将错误做一层封装，将 query 语句打包进错误中
	// 通过调用 IsErrNoRows 判断 sql.ErrNoRows 错误，可以防止 controller 中因为要判断 sql 包下的错误而引入 sql 包
	err = xerrors.Wrap(db.QueryRow(query, id).Scan(&u.ID, &u.Name), query)
	return
}

// IsErrNoRows 判断错误是否是 noRows，dao/db_helper.go。
func IsErrNoRows(err error) bool {
	return errors.Is(xerrors.Cause(err), sql.ErrNoRows)
}
